home *** CD-ROM | disk | FTP | other *** search
/ Cream of the Crop 26 / Cream of the Crop 26.iso / program / p063b9s.zip / UNIT / SEND2UTL.PAS < prev    next >
Pascal/Delphi Source File  |  1996-04-20  |  5KB  |  203 lines

  1. UNIT Send2Utl;
  2. {╔══════════════════════════════════════════════════════════════════════════╗}
  3. {║ Routines for manipulating the SendTo struct   Last changed: 20.04.96  SA ║}
  4. {║                                                                          ║}
  5. {║                         (C) Copyright 1989-93 by                         ║}
  6. {║       Dan Wulff, Jens Sandalgaard, Steen Christensen & S¢ren Ager        ║}
  7. {║                                                                          ║}
  8. {║ This source may not be given to anybody, without the written permission  ║}
  9. {║ from The Portal Team.                                                    ║}
  10. {╚══════════════════════════════════════════════════════════════════════════╝}
  11. {$I POPDEFS.INC}
  12.  
  13. INTERFACE
  14.  
  15. USES Use32, PoPTypes;
  16.  
  17. PROCEDURE ReadSendTo(CONST SendTo: SendToType; VAR Tab:SendToTabType; VAR Num:BYTE);
  18. PROCEDURE WriteSendTo(VAR Tab:SendToTabType; VAR SendTo:SendToType; Num:BYTE);
  19. PROCEDURE SortSendToTab(VAR Tab:SendToTabType; Num:BYTE);
  20. FUNCTION  AddToSendTo(CONST Add: TFidoAddress; VAR Tab:SendToTabType; VAR Num:BYTE):BOOLEAN;
  21. FUNCTION  RemoveFromSendTo(CONST Rem: TFidoAddress; VAR Tab:SendToTabType; VAR Num:BYTE):BOOLEAN;
  22. FUNCTION  IsSendingTo(CONST Add: TFidoAddress; CONST Tab:SendToTabType; VAR Num:BYTE):BOOLEAN;
  23.  
  24. IMPLEMENTATION
  25.  
  26. USES OpString, StrUtil, MailUtil, Globals;
  27.  
  28. FUNCTION RemoveFromSendTo(CONST Rem: TFidoAddress; VAR Tab:SendToTabType; VAR Num:BYTE):BOOLEAN;
  29. VAR
  30.   Found,i:BYTE;
  31. BEGIN
  32.   RemoveFromSendTo:=FALSE;
  33.   Found:=0;
  34.   FOR i:=1 TO Num DO
  35.     IF (Found=0) AND CmpAdr(Rem,Tab[i]) THEN Found:=i;
  36.   IF Found<>0 THEN
  37.   BEGIN
  38.     RemoveFromSendTo:=TRUE;
  39.     FOR i:=Found TO Num-1 DO
  40.       Tab[i]:=Tab[i+1];
  41.     DEC(Num);
  42.   END;
  43. END;
  44.  
  45. FUNCTION AddToSendTo(CONST Add: TFidoAddress; VAR Tab:SendToTabType; VAR Num:BYTE):BOOLEAN;
  46. VAR
  47.   Found:BOOLEAN;
  48. BEGIN
  49.   Found:=IsSendingTo(Add,Tab,Num);
  50.   IF NOT Found THEN
  51.   BEGIN
  52.     INC(Num);
  53.     Tab[Num]:=Add;
  54.     Found:=TRUE;
  55.   END;
  56.   AddToSendTo:=Found;
  57. END;
  58.  
  59. FUNCTION IsSendingTo(CONST Add: TFidoAddress; CONST Tab:SendToTabType; VAR Num:BYTE):BOOLEAN;
  60. VAR
  61.   i:BYTE;
  62.   Found:Boolean;
  63. BEGIN
  64.   Found:=False;
  65.   FOR i:=1 TO Num DO
  66.     IF CmpAdr(Add,Tab[i]) THEN
  67.     BEGIN
  68.       Found:=TRUE;
  69.       Break;
  70.     END;
  71.   IsSendingTo:=Found;
  72. END;
  73.  
  74. PROCEDURE ReadSendTo(CONST SendTo: SendToType; VAR Tab: SendToTabType; VAR Num: BYTE);
  75. VAR
  76.   p,i,n:BYTE;
  77.   sss,ss,s:S80;
  78.   Test : INTEGER;
  79.   Old  : TFidoAddress;
  80. BEGIN
  81.   FILLCHAR(Tab,SizeOf(Tab),0);
  82.   Num:=0;
  83.   FOR n:=1 TO 2 DO
  84.   BEGIN
  85.     s:=SendTo[n];
  86.     IF s<>'' THEN
  87.     BEGIN
  88.       s:=s+' ';
  89.       Replace(s,'  ',' ',0);
  90.       WHILE (s<>'') AND (s[1]=' ') DO
  91.         DELETE(s,1,1);
  92.       Old.Zone:=Cfg.Addresses[Cfg.MainAdrNum].Zone; Old.Net:=0; Old.Node:=0; Old.Point:=0;
  93.       FOR i:=1 TO WordCount(s,[' ']) DO
  94.       BEGIN
  95.         ss:=StUpCase(ExtractWord(i,s,[' ']));
  96.         p:=POS(':',ss);
  97.         IF p>0 THEN
  98.         BEGIN
  99.           sss:=COPY(ss,1,p-1);
  100.           IF sss='ALL' THEN Old.Zone:=-1 ELSE VAL(sss,Old.Zone,Test);
  101.           DELETE(ss,1,p);
  102.         END;
  103.         p:=POS('/',ss);
  104.         IF p>0 THEN
  105.         BEGIN
  106.           sss:=COPY(ss,1,p-1);
  107.           IF sss='ALL' THEN Old.Net:=-1 ELSE VAL(sss,Old.Net,Test);
  108.           DELETE(ss,1,p);
  109.         END;
  110.         p:=POS('.',ss);
  111.         IF p>0 THEN
  112.         BEGIN
  113.           sss:=COPY(ss,1,p-1);
  114.           IF p>1 THEN
  115.             IF sss='ALL' THEN Old.Node:=-1 ELSE VAL(COPY(ss,1,p-1),Old.Node,Test);
  116.           DELETE(ss,1,p);
  117.           IF ss='ALL' THEN Old.Point:=-1 ELSE VAL(ss,Old.Point,Test);
  118.         END ELSE
  119.         BEGIN
  120.           IF ss='ALL' THEN Old.Node:=-1 ELSE VAL(ss,Old.Node,Test);
  121.           Old.Point:=0;
  122.         END;
  123.         INC(Num);
  124.         Tab[Num]:=Old;
  125.       END;
  126.     END;
  127.   END;
  128. END;
  129.  
  130. PROCEDURE WriteSendTo(VAR Tab:SendToTabType; VAR SendTo:SendToType; Num:BYTE);
  131.  
  132. LABEL
  133.   Loop;
  134. VAR
  135.   n,i:BYTE;
  136.   Add:STRING;
  137.   Old: TFidoAddress;
  138.  
  139.   FUNCTION AllNum(Num:INTEGER):S50;
  140.   VAR
  141.     s:S50;
  142.   BEGIN
  143.     IF Num=-1 THEN s:='ALL' ELSE s:=Long2Str(Num);
  144.     AllNum:=s;
  145.   END;
  146.  
  147. BEGIN
  148.   FillChar(Old, SizeOf(Old), 0);
  149.   Old.Zone:=Cfg.Addresses[Cfg.MainAdrNum].Zone;
  150.   FILLCHAR(SendTo,SizeOf(SendTo),0);
  151.   n:=1;
  152.   FOR i:=1 TO Num DO
  153.   BEGIN
  154. Loop:
  155.     WITH Tab[i] DO
  156.     BEGIN
  157.       IF SendTo[n]<>'' THEN Add:=' ' ELSE Add:='';
  158.       IF Zone<>Old.Zone THEN
  159.         Add:=Add+AllNum(Zone)+':'+AllNum(Net)+'/'+AllNum(Node)
  160.       ELSE
  161.         IF Net<>Old.Net THEN
  162.           Add:=Add+AllNum(Net)+'/'+AllNum(Node)
  163.         ELSE
  164.           IF Node<>Old.Node THEN Add:=Add+AllNum(Node);
  165.       IF Point<>0 THEN Add:=Add+'.'+AllNum(Point);
  166.       IF LENGTH(Add)+Length(SendTo[n])>50 THEN
  167.       BEGIN
  168.         INC(n);
  169.         FillChar(Old, SizeOf(Old), 0);
  170.         Old.Zone:=Cfg.Addresses[Cfg.MainAdrNum].Zone;
  171.         GOTO Loop;
  172.       END;
  173.       Old.Zone:=Zone; Old.Net:=Net; Old.Node:=Node;
  174.       SendTo[n]:=SendTo[n]+Add;
  175.     END;
  176.   END;
  177. END;
  178.  
  179. PROCEDURE SortSendToTab(VAR Tab:SendToTabType; Num:BYTE);
  180. VAR
  181.   n,i:BYTE;
  182.   Gem:TFidoAddress;
  183. BEGIN
  184.   IF Num>1 THEN
  185.   BEGIN
  186.     n:=1;
  187.     WHILE n=1 DO
  188.     BEGIN
  189.       n:=0;
  190.       FOR i:=1 TO Num-1 DO
  191.         IF Address2Sort(Tab[i])>Address2Sort(Tab[i+1]) THEN
  192.         BEGIN
  193.           Gem:=Tab[i];
  194.           Tab[i]:=Tab[i+1];
  195.           Tab[i+1]:=Gem;
  196.           n:=1;
  197.         END;
  198.     END;
  199.   END;
  200. END;
  201.  
  202. END.
  203.